<!-- 各种系统授权专用页面 -->
<template>
  <div class="container">
    {{ errMsg }}
  </div>
</template>

<script>
import * as dd from 'dingtalk-jsapi'
import { getUrlParam } from '@/utils/index.js'
import { authentication } from '@/api/user'
export default {
  data(){
    return {
      errMsg: '跳转中...'
    }
  },
  created(){
    // 在钉钉环境内执行免密登录
    if (dd.env.platform !== 'notInDingTalk') this.handleAuthentication()
  },
  methods: {
    // 钉钉鉴权
    handleAuthentication() {
      const url = document.location.toString()
      const corpId = getUrlParam('corpid')
      authentication({url, corpId, magic: 0}).then(res => {
        const { agentId, corpId, timeStamp, nonceStr, signature } = res.data
				dd.config({
					agentId, // 必填，微应用ID
					corpId,//必填，企业ID
					timeStamp, // 必填，生成签名的时间戳
					nonceStr, // 必填，自定义固定字符串。
					signature, // 必填，签名
					type: 0,   //选填。0表示微应用的jsapi,1表示服务窗的jsapi；不填默认为0。该参数从dingtalk.js的0.8.3版本开始支持
					jsApiList : [
						'runtime.info',
						'biz.contact.choose',
						'device.notification.confirm',
						'device.notification.alert',
						'device.notification.prompt',
						'biz.ding.post',
						'biz.util.openLink',
					] // 必填，需要使用的jsapi列表，注意：不要带dd。
				})
        dd.error(function (err) {
            alert('dd error: ' + JSON.stringify(err));
        })//该方法必须带上，用来捕获鉴权出现的异常信息，否则不方便排查出现的问题
        this.getCode()
      })
    },
    handleLogin(code, corpId) {
      this.$store
        .dispatch('user/ddUserLogin', {code, corpId})
        .then(() => {
          this.$router.push({ path: '/' })
        })
        .catch((err) => {
          this.$message.error(JSON.stringify(err))
        })
    },
    getCode() {
      const corpId = getUrlParam('corpid')
      if (corpId) {
        const that = this
        dd.ready(()=> {
          // 使用SDK 获取免登授权码
          dd.runtime.permission.requestAuthCode({
            corpId: corpId,
            onSuccess: ({ code }) => {
              that.handleLogin(code, corpId)
            },
            onFail: (err) => {
              this.errMsg = JSON.stringify(err)
            }
          })
        })
      } else {
        this.errMsg = 'url缺少corpid参数, 无法登录 请关闭当前页重试！'
        this.$confirm(errMsg, '提示', {
          confirmButtonText: '知道了',
          showCancelButton: false,
          showClose: false,
          closeOnClickModal: false,
          type: 'warning'
        }).then(() => {
            window.opener = null
            window.open("", "_self")
            window.close()
        }).catch(() => {})
      }
    }
  }
}
</script>
